﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using System.Data.OleDb;
using System.IO;

namespace DiaryPlanner
{
    public partial class AlbumAddFolder : Form
    {
       public  Album thisAlbumObject;

        public AlbumAddFolder(Album ab)
        {
            thisAlbumObject = ab;
            InitializeComponent();
            skinSet();
        }
        public void skinSet()
        {
            string skin = UserProfile.Instance().setting;
            if (skin == "b")
            {
                this.BackColor = System.Drawing.Color.PaleTurquoise;

            }
            else if (skin == "c")
            {
                this.BackColor = System.Drawing.Color.LawnGreen;
            }
            else if (skin == "d")
            {
                this.BackColor = System.Drawing.Color.MistyRose;

            }
            else
            { //skin=="a"
                this.BackColor = System.Drawing.SystemColors.ControlLight;

            }
        }

        private void button2_Click(object sender, EventArgs e)//취소
        {
            this.Close();
        }

        private void button1_Click(object sender, EventArgs e)//폴더 추가
        {
           

            if (folderName.Text == "" || folderName.Text == " " || folderName.Text == "  " || folderName.Text == "   " || folderName.Text == "    ")
            {            
                return;
            }
           
            //폴더 추가

            AlbumFolder af = new AlbumFolder(thisAlbumObject);//보여지는 폴더 이름
            af.realName = "AF" + "_" + System.DateTime.Now.Year.ToString() + "_" +
                System.DateTime.Now.Month.ToString() + "_" +
                System.DateTime.Now.Day.ToString() + "_" +
                    System.DateTime.Now.Hour.ToString() + "_" +
                    System.DateTime.Now.Minute.ToString() + "_" +
                    System.DateTime.Now.Second.ToString();//진짜 폴더 이름
           
            //디렉토리에 폴더 추가
            try
            {
                // If the directory doesn't exist, create it.
                if (!Directory.Exists(Application.StartupPath+"/UserImage/" + UserProfile.Instance().userId + "/Album/" + af.realName))
                {
                    Directory.CreateDirectory(Application.StartupPath + "/UserImage/" + UserProfile.Instance().userId + "/Album/" + af.realName);
                }
            }
            catch (IOException a)
            {
                MessageBox.Show(a.ToString());
                // Fail silently
            }
            
            //db
            save_db( af.realName, this.folderName.Text.ToString());

            af.folderName = this.folderName.Text.ToString();
            thisAlbumObject.FolderList.Add(af);// folderList에 폴더 추가   
            thisAlbumObject.closeFolderImage(thisAlbumObject.nowFolder);
            thisAlbumObject.nowFolder = af;//nowfolder
            thisAlbumObject.openFolderImage(thisAlbumObject.nowFolder);
            thisAlbumObject.viewAllFolder();
            thisAlbumObject.viewAllPhoto();//nowFolder의 내용

            this.Close();
        }


        //realName: reaName Album의 하위 디렉토리에 실제로 생기는 폴더이름
        //Fname: viewName 프로그램에 보여지는 이름
        private void save_db(string realName, string viewName)
        {

            try //예외처리문
            {
                string connectionString = "provider=Microsoft.JET.OLEDB.4.0;" //연결하는 객체의 공급자명(확장자명)
                                        + "data source = "  //데이터 소스=(경로입력하라는거)
                                        + Application.StartupPath ///상대경로 읽어옴
                                        + @"\diaryplannerdb.mdb";//실제 데이터베이스 파일이름

                string commandString = "Select * from [photo_folder]";//photo_folder테이블에 있는 모든필드들을 모두 검색해라.

                OleDbDataAdapter DBAdapter ////DataSet을 채우고 데이터 소스를 업데이트하는 데 사용되는 데이터 명령 집합 및 데이터베이스 연결하게 하는 함수
                    = new OleDbDataAdapter(commandString, connectionString);//connectionString이라는 경로와 쿼리명령을 동적할당

                OleDbCommandBuilder myCommandBuilder ///연결된 데이터베이스에서 DataSet의 변경 내용을 조정하는 데 사용되는 단일 테이블 명령을 자동으로 생성합니다
                    = new OleDbCommandBuilder(DBAdapter);

                DataSet DS = new DataSet(); //DS라는 데이터 셋 동적할당

                DBAdapter.Fill(DS, "photo_folder"); //DS라는 데이터셋에 새로운 photo_folder 테이블에 추가 또는 갱신하겠다고 알림.

                DataTable aTable = DS.Tables["photo_folder"];//photo_folder테이블을 불러와 aTable을 새로 생성해서 저장
                DataRow newRow = aTable.NewRow();

                
                newRow["realName"] = realName;//진짜 이름
                newRow["Fname"] = viewName;//보여지는 이름
                newRow["id"] = UserProfile.Instance().userId;

                aTable.Rows.Add(newRow);

                DBAdapter.Update(DS, "photo_folder");
            }
            catch (DataException DE)
            {
                MessageBox.Show(DE.Message);
            }
            catch (Exception DE)
            {
                MessageBox.Show(DE.Message);
            }


        }
    }
}
